u`
eLXgсFp.363uWFlbNƂ́v
Q[JKFwiʂ̃XN[AL[{[h̏Ԃm Ȃ

p.363 WFlbNƂ

EWFlbNƂ́úvƂӖŁu^ϐň΁A^قȂNX⃁\bhPɂłvdg
E܂A\bh̃I[o[[h̉ό(p.201)ȂǂɐiʒuÂ

p.363 WFlbNNX

EpɌ^włNX
E`F class NX<^p[^> {c}
EʏA^p[^ɂ͑啶1p邱Ƃ(C#񋟂WFlbNNXȂ̂)
EF class Monster<T> { public T power; } //^p[^Ŏw肵^̃f[^oNX
EWFlbNNXʏ̃NX痘pɂ́A錾ƐɌ^w肷
E錾F NX<^> Qƕϐ;
EF Qƕϐ = new NX<^>(c);
E錾Ɛ𓯎ɍsꍇA^QӏwłF NX<^> Qƕϐ = new NX<^>(c);
EF Monster<int> rimuru = new Monster<int>(); //@power𐮐ňX^[rimurȕ
EF Monster<double> gobuta = new Monster<double>(); //ApowerňX^[gobutȁ
EF Monster<string> shuna = new Monster<string>(); //Bpower𕶎ňX^[shunȁ
E܂AIɌ^p[^̒usǍʂ̃IuWFNg
EF class Monster<T> { public T power; }  class Monster { public int power; } //@̏ꍇ

p.364 generic01.cs

//p.364 generic01.cs
using System;
class MyClass<T> { //^p[^TWFlbNNX
    public T name; //錾Ɍ^܂f[^o
    public T GetVal() { //錾߂l܂郁\bh(ANZbT)
        return name; //namě^߂l^Ɉv̂łǂȌ^łOK
    }
}
class generic01 {
    public static void Main() {
        MyClass<int> mca = new MyClass<int>(); //^intw肵ăCX^X𐶐
        mca.name = 10; //CX^Xϐnamě^intȂ̂Őł
        Console.WriteLine(mca.GetVal()); //GetVal\bh̖߂l^intȂ̂ŐԂ
        MyClass<string> mcb = new MyClass<string>(); //^stringw肵ăCX^X𐶐
        mcb.name = "L"; //CX^Xϐnamě^stringȂ̂ŕł
        Console.WriteLine(mcb.GetVal()); //GetVal\bh̖߂l^stringȂ̂ŕ񂪕Ԃ
    }
}

AWKFp.364 generic01.cs

Emca.GetVal()͖߂l^intȂ̂ŁA+10ƉZɂȂ
Emcb.GetVal()͖߂l^stringȂ̂ŁA+10ƘAɂȂ
EȏǋLĊmF悤

쐬

//AWKFp.364 generic01.cs
using System;
class MyClass<T> { //^p[^TWFlbNNX
    public T name; //錾Ɍ^܂f[^o
    public T GetVal() { //錾߂l܂郁\bh(ANZbT)
        return name; //namě^߂l^Ɉv̂łǂȌ^łOK
    }
}
class generic01 {
    public static void Main() {
        MyClass<int> mca = new MyClass<int>(); //^intw肵ăCX^X𐶐
        mca.name = 10; //CX^Xϐnamě^intȂ̂Őł
        Console.WriteLine(mca.GetVal() + 10); //GetVal\bh̖߂l^intȂ̂ŐԂZ
        MyClass<string> mcb = new MyClass<string>(); //^stringw肵ăCX^X𐶐
        mcb.name = "L"; //CX^Xϐnamě^stringȂ̂ŕł
        Console.WriteLine(mcb.GetVal() + 10); //GetVal\bh̖߂l^stringȂ̂ŕ񂪕ԂA
    }
}

p.365ǐ^p[^WFlbNNXj

EWFlbNNX̌^p[^ɂ͐͂Ȃ
EQȏpꍇ́AJ}ŋ؂
E`F class NX<^p[^@, ^p[^A> {c}
EF class Monster<T, U> { public T hp; public U mp; } //^p[^Ŏw肵^̃f[^oNX
Ě^p[^WFlbNNXʏ̃NX痘pɂ́A錾ƐɑSĂ̌^p[^Ɍ^w肷
E錾F NX<^@,^A> Qƕϐ;
EF Qƕϐ = new NX<^@,^A>(c);
E錾Ɛ𓯎ɍsꍇF NX<^@,^A> Qƕϐ = new NX<^@,^A>(c);
EF Monster<int, double> rimuru = new Monster<int, double>(); //hp𐮐AmpňX^[rimurȕ

p.365iž^p[^WFlbNNXj

Ef[^oƂĔzǍ^WFlbNŎw肷邱Ƃ\
E錾F ^p[^[] z;
EF z = new ^p[^[vf];
E^錾Ɍ܂Ȃ̂ŁA͂łȂAvfw̐錾{͉\
@F public T[] a = new T[10];

p.365 generic02.cs

//p.365 generic02.cs
using System;
class MyClass<T, U> { //Q̌^p[^T,UWFlbNNX
    public T[] x; //T^̔zx̐錾̂
    public U[] y; //U^̔zy̐錾̂
    public MyClass(int n) { //RXgN^(͗vf)
        x = new T[n]; //vfnT^̔zx̗vf𐶐
        y = new U[n]; //vfnU^̔zy̗vf𐶐
    }
}
class generic02 {
    public static void Main() {
        int n; //z̗vf       
        Console.Write("n = ");
        string strN = Console.ReadLine();
        if (!Char.IsDigit(strN[0])) { //擪ł͂ȂH
            Console.WriteLine("͂sK؂ł");
            return; //I
        }
        n = int.Parse(strN); //
        //Qw肵ăCX^XARXgN^삵Qz̗vfen
        MyClass<int, string> mc = new MyClass<int, string>(n); 
        for (int i = 0; i < n; i++) { //SvfɂČJԂ
            Console.Write("ԍ--- ");
            string strNo = Console.ReadLine();
            if (!Char.IsDigit(strNo[0])) { //擪ł͂ȂH
                Console.WriteLine("sK؂Ȕԍł");
                break; //I
            }
            mc.x[i] = int.Parse(strNo); //Ĕzx̗vf[i]ɑ
            Console.Write("--- ");
            string strName = Console.ReadLine();
            mc.y[i] = strName; //̂܂ܔzy̗vf[i]ɑ
        }
        Console.WriteLine(); //s
        for (int i = 0; i < n; i++) { //SvfɂČJԂ
            Console.WriteLine("[{0}] {1}", mc.x[i], mc.y[i]);
        }
    }
}

y⑫zWFlbNvpeB

EvpeB̖߂l^^p[^ɂł
E`F public ^p[^ vpeB { get {c} set {c} }
EF public T HP { get { return hp; } set { hp = value; } }
Evalue̓IȌ^́AIɌ^p[^Ɠ^ɂȂ

AWKFp.364 generic01.cs

EGatVal\bhvpeB(get̂)ɂ悤

쐬

//AWKFp.364 generic01.cs
using System;
class MyClass<T> { //^p[^TWFlbNNX
    public T name; //錾Ɍ^܂f[^o
    public T GetVal { //錾߂l܂vpeB
        get { return name; } //namě^߂l^Ɉv̂łǂȌ^łOK
    }
}
class generic01 {
    public static void Main() {
        MyClass<int> mca = new MyClass<int>(); //^intw肵ăCX^X𐶐
        mca.name = 10; //CX^Xϐnamě^intȂ̂Őł
        Console.WriteLine(mca.GetVal); //GetValvpeB̖߂l^intȂ̂ŐԂ
        MyClass<string> mcb = new MyClass<string>(); //^stringw肵ăCX^X𐶐
        mcb.name = "L"; //CX^Xϐnamě^stringȂ̂ŕł
        Console.WriteLine(mcb.GetVal); //GetValvpeB̖߂l^stringȂ̂ŕ񂪕Ԃ
    }
}

y⑫zWFlbNCfNT

ECfNŤ^^p[^ɂł
E`F public ^p[^ this[^ CfbNX] { get {c} set {c} }
EF public T this[int i] { get { return a[i]; } set { a[i] = value; } }

AWKFp.365 generic02.cs

EzxWFlbNCfNTň悤ɂ悤

쐬

//AWKFp.365 generic02.cs
using System;
class MyClass<T, U> { //Q̌^p[^T,UWFlbNNX
    public T[] x; //T^̔zx̐錾̂
    public U[] y; //U^̔zy̐錾̂
    public MyClass(int n) { //RXgN^(͗vf)
        x = new T[n]; //vfnT^̔zx̗vf𐶐
        y = new U[n]; //vfnU^̔zy̗vf𐶐
    }
    public T this[int i] { //yȉǉzT^̔zxɂCfNT
        get { return x[i]; } set { x[i] = value; }
    }
}
class generic02 {
    public static void Main() {
        int n; //z̗vf       
        Console.Write("n = ");
        string strN = Console.ReadLine();
        if (!Char.IsDigit(strN[0])) { //擪ł͂ȂH
            Console.WriteLine("͂sK؂ł");
            return; //I
        }
        n = int.Parse(strN); //
        //Qw肵ăCX^XARXgN^삵Qz̗vfen
        MyClass<int, string> mc = new MyClass<int, string>(n); 
        for (int i = 0; i < n; i++) { //SvfɂČJԂ
            Console.Write("ԍ--- ");
            string strNo = Console.ReadLine();
            if (!Char.IsDigit(strNo[0])) { //擪ł͂ȂH
                Console.WriteLine("sK؂Ȕԍł");
                break; //I
            }
            mc[i] = int.Parse(strNo); //yύXzĔzx̗vf[i]ɃCfNToRő
            Console.Write("--- ");
            string strName = Console.ReadLine();
            mc.y[i] = strName; //̂܂ܔzy̗vf[i]ɑ
        }
        Console.WriteLine(); //s
        for (int i = 0; i < n; i++) { //SvfɂČJԂ
            Console.WriteLine("[{0}] {1}", mc[i], mc.y[i]); //yύXzzx̓CfNToRŗp
        }
    }
}

p.367iWFlbNƃRNVNXj

EArrayListNX̂悤Ƀf[^\񋟂NX̒ɂ́AWFlbNNXȂ\ႪList<T>NX
EList<T>NX̓f[^\Ɋi[vf̌^^p[^ŗ^ėp
EƁAzƓlɎgĔz_ȃf[^\^wŗpł
EArrayListNXł͊i[ƌ^񂪎AoɃLXgŗ^Kv邪AList<T>NXł͌^^̂ł̕Kv͂ȂA~Xh~ł
EList<T>NXɂAvfi[Add\bhAvfԂCountvpeBA񂷂Sort\bhȂǂ
Eusing System.Collections.Generic; w肷Ɨǂ

// p.368 list01.cs
using System;
using System.Collections.Generic; //Listp
class list01 {
    public static void Main() {
        bool bEnd = false; //ItOIt
        List<int> mylist = new List<int>(); //int^w肵ăWFlbNRNVNX𗘗p
        while (true) { //[v
            Console.Write("Data = ");
            string strData = Console.ReadLine();
            if (!Char.IsDigit(strData[0])) { //擪ł͂ȂH
                bEnd = true; //ItOI
            } else {
                mylist.Add(int.Parse(strData)); //ăXgɊi[(łOK)
            }
            if (bEnd) { //ItOFIH
                break; //JԂI
            }
        }
        Console.WriteLine(); //s
        for (int i = 0; i < mylist.Count; i++) { //SvfɂČJԂ
            Console.WriteLine("[{0}] {1}", i, mylist[i]);
        }
        Console.WriteLine();
        mylist.Sort(); //ɐ
        for (int i = 0; i < mylist.Count; i++) { //SvfɂČJԂ
            Console.WriteLine("[{0}] {1}", i, mylist[i]);
        }        
    }
}

eLXgю\Fp.369uRNVNX̏v

Q[JKFwiʂ̃XN[AL[{[h̏Ԃm Ȃ

e[}27 wi摜̃XN[

Ewi摜QpӂāAPڂ̕`Jnʒu炵A󂢂ɂPȂ悤ɕ`悷΁Awi摜̃XN[\
EȂAC#GDI+ł͕`ʒuW𕉂̐`͈͊OɂłBɂA摜̈ꕔ\邱Ƃ\
E摜Ŝ`͈͂̊OɂȂA`ΏۂOA`ʒuςƗǂ
Ewi摜̏cXN[̏ꍇA`Jnʒu[𒴂0ɖ߂Ɨǂ
Ewi摜͂QɂȂ邪A摜IuWFNg͂PŗǂAQ̎QƕϐňΗǂ

K23 wi摜̏cXN[

Ewi摜̂ȂڂYWϐbacky0ŏĂA^C}[ɂăCNg
@iwi摜.Height𒴂0ɖ߂j
Ewi摜̕`Qɑ₵A(0, backy)ƁA(0, backy - wi摜.Height)`
E^C}[̃C^[o10~bɕύXƗǂ

쐬

//K23 _uobt@O̓
using System; //tH[AvP[VɕK{
using System.Windows.Forms; //tH[AvP[VɕK{
using System.Drawing; //Imagep
class Program : Form { //FormNXp
    Image backb = Image.FromFile("backb.bmp"); //wi摜̓Ǎ
    Image enemy = Image.FromFile("enemy.gif"); //ACe摜̓Ǎ
    Image burn = Image.FromFile("burn.gif"); //ʗp摜̓Ǎ
    Pen mypen = new Pen(Color.Red, 2); //y𐶐(l͐ԁA2)
    Brush bred = new SolidBrush(Color.FromArgb(63, 255, 0, 0)); //uV𐶐(Ԃ̓F)
    Brush byel = new SolidBrush(Color.Yellow); //uV𐶐(F)
    Font f20 = new Font("CI", 20, FontStyle.Bold); //tHg𐶐(CI20P)
    Font f80 = new Font("CI", 80, FontStyle.Bold); //tHg𐶐(CI80P)
    int gamemode = 0; //0:X^[gʁA1:vC
    int score = 0; //XRA
    int backy = 0; //yǉzwi摜̂ȂڂYW
    Timer timer = new Timer(); //^C}[𐶐
    void DrawCircle(PaintEventArgs e, Pen p, int x, int y, int r) { //yASWAaw肵ĉ~`
        e.Graphics.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); //~̕`Ă
    }
    protected override void OnPaint(PaintEventArgs e) { //Form̃\bhI[o[Ch
        base.OnPaint(e); //܂AFormNXɂ郁\bh̓e({ĕ`揈)s
        e.Graphics.DrawImage(backb, 0, backy); //yύXzwi摜(0,Ȃ)`
        e.Graphics.DrawImage(backb, 0, backy - backb.Height); //yǉzwi摜̏ɕ`
        if (gamemode == 0) { //X^[g
            e.Graphics.DrawString("GAME1", f80, byel, 100, 100); //^Cg̕`
            e.Graphics.DrawString("Hit Enter to Start", f20, byel, 200, 300); //bZ[W̕`
        } else if (gamemode == 1) { //vC
            e.Graphics.FillRectangle(bred, 78, 411, 485, 64); //GA𓧖ԂœhԂ
            e.Graphics.DrawRectangle(mypen, 78, 411, 485, 64); //GA̕`
            string s = String.Format("SCORE:{0:000,000}", score); //XRAҏW
            e.Graphics.DrawString(s, f20, byel, 400, 10); //XRA̕`
        }
    }
    void OnKeyDown(object o, KeyEventArgs e) { //L[{[hꂽɌĂ΂郁\bh
        if(e.KeyCode.ToString() == "Escape") { //EscL[ꂽ
            Close(); //tH[AvP[VI
        }
        if(gamemode == 0 && e.KeyCode.ToString() == "Return") { //X^[gʂEnterL[ꂽ
            gamemode = 1; //vCʂɐ؂ւ
            timer.Start(); //^C}[Jn
            Invalidate(); //ʍĕ`˗
        }
    }
    void Play(object o, EventArgs e) { //^C}[Ă΂郁\bh
        score++; //XRAAbv
        backy = (backy < backb.Height) ? backy + 1 : 0; //yǉzwi摜̂Ȃڂ
        Invalidate(); //ʍĕ`˗
    }
    Program() { //RXgN^
        DoubleBuffered = true; //_uobt@O̓
        KeyDown += new KeyEventHandler(OnKeyDown); //L[{[hꂽɌĂ΂郁\bho^
        timer.Tick += new EventHandler(Play); //^C}[Ă΂郁\bho^
        timer.Interval = 10; //yύXz^C}[̊Ԋu
    }
    static void Main() { //public̎w͔C
        Program p = new Program(); //ptH[̃CX^X𐶐
        p.Width = 660; //CX^XWidthvpeBɕ
        p.Height = 520; //CX^XHeightvpeBɍ
        p.Text = "Game"; //CX^XTextvpeBɃtH[
        p.ControlBox = false; //ControlBox\ɂ
        p.FormBorderStyle = FormBorderStyle.Fixed3D; //tH[TCYύX֎~
        Application.Run(p); //CX^Xʂɏo
    }
}

e[}28 L[{[h̏Ԃ𓾂

EL[̓Cxgp@́uL[ĂԁAZZvɂ͌Ȃ
EɃ^C}[CxgpăL[{[h̏Ԃ𓾂鏈ĂяoĂ炤Ɨǂ
Eɂ́AWindowsAPI񋟂DLLiINCuj̈łuuser32.dllv𒼐ڃC|[g
EC|[g̏F [System.Runtime.InteropServices.DllImport("user32.dll")] Z~Rsv
EƁAɊ܂܂GetKeyState\bhO`wɂ藘p\ɂȂ
EO`w̏F private static extern short GetKeyState(int nVirtKey);
EGetKeyState\bhɈƂKey񋓎qint^ɃLXgė^ƁÃL[ĂΕ̐Ԃ
EC|[gƊO`w̓NX`̐擪ōs

K24 L[ĂXRAAbv

EL[Key񋓎qKeys.Up
EpāAPlay\bhŁAL[Ă邩`FbNAĂXRACNg悤

oFK23܂24iłOKj

Q[JK\FK24A@̕\ƍEړA@̃Aj[V Ȃ
